package common.model.Entity;

import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 线程安全的验证码缓存工具类
 */
public class VerificationCodeCache {
    // 使用ConcurrentHashMap确保线程安全
    private static final Map<String, String> CODE_CACHE = new ConcurrentHashMap<>();
    private static final long EXPIRE_TIME = 5 * 60 * 1000; // 5分钟过期
    // 使用单例的Timer，而不是每次都创建新的Timer
    private static final Timer TIMER = new Timer("VerificationCodeTimer", true);

    /**
     * 存储验证码并设置过期时间
     */
    public static void storeCode(String email, String code) {
        // ConcurrentHashMap的put操作是线程安全的
        CODE_CACHE.put(email, code);

        // 设置定时任务，5分钟后自动清除
        TIMER.schedule(new TimerTask() {
            @Override
            public void run() {
                // ConcurrentHashMap的remove操作是线程安全的
                CODE_CACHE.remove(email);
            }
        }, EXPIRE_TIME);
    }

    /**
     * 获取存储的验证码
     */
    public static String getCode(String email) {
        // ConcurrentHashMap的get操作是线程安全的
        return CODE_CACHE.get(email);
    }

    /**
     * 验证成功后移除验证码
     */
    public static void removeCode(String email) {
        CODE_CACHE.remove(email);
    }
}
